#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int output(int *a,int (*b)[2]){
    int x=a[0]+1,y=a[1]+1;
    int result[x][y];
    for(int i=0;i<x;i++){
        for(int j=0;j<y;j++){
            result[i][j]=0;
            cout<<result[i][j]<<",";
        }
        cout<<"\n";
    }

    for(int i=1;i<x;i++) {
        for (int j = 1; j <y; j++) {
            if(j-b[i-1][0]<0){
                result[i][j]=result[i-1][j];
            }else{
                result[i][j] = max(result[i - 1][j], result[i - 1][j - b[i-1][0]] + b[i-1][1]);
            }
            cout<<result[i][j]<<",";
        }
        cout<<"\n";
    }

    return result[a[0]][a[1]];
}

int main(){
    int a[2]={3,4};
    int b[3][2]={
            {2,10},
            {3,18},
            {2,10}

    };
//    int a[2]={5,10};
//    int b[5][2]={
//            {2,6},
//            {2,3},
//            {6,5},
//            {5,4},
//            {4,6},
//    };

    cout<<output(a,b)<<endl;
    return 0;
}